iT邦幫忙

2022 iThome 鐵人賽

DAY 7
0

程式語言基礎教學在網路上很多,這裡只提一些我在學習 Kotlin 時遇到一些其他語言比較不常見的用法

Lambda 預設單變數名稱

Kotlin 對於只有一個參數的 lambda 可以省略宣告參數名稱,自動命名為 it

val foo: (Int) -> Int = { it + 1 }

Lambda 省略回傳宣告

lambda 可以將最後一行當作回傳

val foo: (Int) -> Int = {
    val num = it + 1
    num
}

最後的 Lambda 參數外挪

當 lambda 作為函式的最後一個參數時,呼叫函式時可以將 lambda 挪到括號外面

fun foo(num: Int, scope: (Int) -> Unit) {
    scope(num)
}

fun main() {
    foo(1) {
        println(it)
    }
}

Extension Function & Property

以往要寫一個對變數操作的函式把變數當成參數傳進去再操作,這個技巧可以讓函式的 scope 在那個 Class 裡面

fun String.quoted(): String = "'$this'"
val String.quoted: String
    get() = "'$this'"

Extension Lambda

不只 function,連 lambda 都能宣告成 class extension

fun main() {
    val quoted: String.() -> String = { "'$this'" }
    println("A B C".quoted())
}

委派屬性

只要一個 class 實作 getValuesetValue 的運算子方法時,變數可以委派給這個 class,相當於把變數的 getter 跟 setter 委派給這個 class

class Delegate {
    operator fun getValue(thisRef: Any?, property: KProperty<*>):Int {

    }

    operator fun setValue(thisRef: Any?, property: KProperty<*>, value: Int) {

    }
}

val num1: Int by Delegate()

上一篇
Day 06 - APP 逆向工程
下一篇
Day 08 - Android Studio 介紹與使用
系列文
關於我用 Compose UI 造新輪子這檔事24
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言